define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'jstree'], function ($, undefined, Backend, Table, Form, undefined) {
    //读取选中的条目
    $.jstree.core.prototype.get_all_checked = function (full) {
        var obj = this.get_selected(), i, j;
        
        for (i = 0, j = obj.length; i < j; i++) {
            obj = obj.concat(this.get_node(obj[i]).parents);
        }
        obj = $.grep(obj, function (v, i, a) {
            return v != '#';
        });
        obj = obj.filter(function (itm, i, a) {
            return i == a.indexOf(itm);
        });
        return full ? $.map(obj, $.proxy(function (i) {
            return this.get_node(i);
        }, this)) : obj;
    };
  var Controller = {
      index: function () {
          var table = $("#table");
          $(document).on('click', '.thisaddtabs', function (e) {
              Backend.api.addtabs(Backend.api.replaceids(this, $(this).attr('url')), $(this).attr('title'));
              return false;
          });

          $(document).on('click', '#chkSelectAll', function (e) {
              var c = $(this).attr("checked");
              if(typeof(c)=='undefined'){
                  $(this).attr("checked","");
              }else{
                  $(this).removeAttr("checked");
              }
              $("#table input[name=btSelectItem]").each(function(){
                  $(this).prop("checked",!$(this).prop("checked"));
              });
              if($("#table input[name=btSelectItem]:checked").length>0){
                  $(".btn-del").removeClass('disabled');
              }else{
                  $(".btn-del").addClass('disabled');
              }
              return false;
          });

          $(document).on('click', 'input[name=btSelectItem]',function (e) {
              if($("input[name=btSelectItem]:checked").length>0){
                  $(".btn-edit").removeClass('disabled');
                  $(".btn-del").removeClass('disabled');
                  if(typeof($(".btn-more"))!='undefined'){
                      $(".btn-more").removeClass('disabled');
                  }
              }else{
                  $(".btn-edit").addClass('disabled');
                  $(".btn-del").addClass('disabled');
                  if(typeof($(".btn-more"))!='undefined'){
                      $(".btn-more").addClass('disabled');
                  }
              }
          });
          $(document).on('click', '.btn-edit' ,function(e){
                e.preventDefault();
                var chenked = $("input[name='btSelectItem']:checked");
                Backend.api.addtabs(Backend.api.replaceids(this, 'auth.group/edit?ids='+chenked[0].value),'编辑部门');
                return false;
          });
          var form = $("form.form-commonsearch");
          if ($(".datetimepicker", form).size() > 0) {
              require(['bootstrap-datetimepicker'], function () {
                  var options = {
                      format: 'YYYY-MM-DD',
                      icons: {
                          time: 'fa fa-clock-o',
                          date: 'fa fa-calendar',
                          up: 'fa fa-chevron-up',
                          down: 'fa fa-chevron-down',
                          previous: 'fa fa-chevron-left',
                          next: 'fa fa-chevron-right',
                          today: 'fa fa-history',
                          clear: 'fa fa-trash',
                          close: 'fa fa-remove'
                      },
                      showTodayButton: true,
                      showClose: true
                  };
                  $('.datetimepicker', form).parent().css('position', 'relative');
                  $('.datetimepicker', form).datetimepicker(options);
              });
          }
          $(".data-select",form).on('change', function (e) {
                var url = $(this).attr("data-url");var s = $(this).attr("data-select");
                $.ajax({
                    type: "post",
                    url: url,
                    data: {pid:$(this).val(),r:Math.random()},
                    dataType: 'JSON',
                    success: function (data, status) {
                        var str = '';
                        $.each(eval(data), function (k, v) {
                            str += '<option value="' + v.id + '">' + v.name + '</option>';
                        });
                        $("#"+s).html(str);
                    },
                    error: function () {
                        alert('编辑失败');
                    },
                    complete: function () {

                    }
                });
          });
          $('div.keep-open ul li[role="menuitem"] input[type="checkbox"]').on('change', function(e){
                var cn = $(this).attr("data-field");
                var cnc = Fast.api.ucfirst(cn);
                if($(this).is(':checked')){
                    if($("#table thead").is(":hidden")){
                        addColumnMobile(cn);
                    }else{
                        addColumnPc(cn);
                    }
                }else{
                    if($("#table thead").is(":hidden")){
                        $("#datalist .card-view[columnname="+cn+"]").remove();
                        $("#table thead tr th[data-field='"+cn+"']").remove();
                    }else{
                        //隐藏那个列
                        $("#datalist tr td[columnname="+cnc+"]").remove();
                        $("#table thead tr th[data-field='"+cn+"']").remove();
                    }
                }
          });
          //删除按钮
          $(".btn-del").on("click",function (e) {
              e.preventDefault();
              var chenked = $("input[name='btSelectItem']:checked");
              var ids = "";
              for(var i=0;i<chenked.length;i++){
                  ids += chenked[i].value+",";
              }
              if(chenked.length==0){
                  var index2 = Layer.confirm('请选择模块','请选择');

              }else{
                  var id = $(this).data("id");
                  var that = this;
                  var index = Layer.confirm(
                      __('Are you sure you want to delete this item?'),
                      {icon: 3, title: __('Warning'), shadeClose: true},
                      function () {
                          $.ajax({
                              type: "post",
                              url: "/cms.php/auth.group/dels.html",
                              data: {ids:ids},
                              dataType: 'JSON',
                              success: function (data, status) {
                                  if (status == "success") {
                                      Layer.close(index);
                                      location.reload();
                                  }
                              },
                              error: function () {
                                  alert('编辑失败');
                              },
                              complete: function () {

                              }

                          });

                      }
                  );
              }

          });
          $(".btn-delone").on("click",function(e){
              var ids = $(this).prop("title");
              var index = Layer.confirm(
                  __('Are you sure you want to delete this item?'),
                  {icon: 3, title: __('Warning'), shadeClose: true},
                  function () {
                      $.ajax({
                          type: "post",
                          url: "/cms.php/auth.group/del.html",
                          data: {ids:ids},
                          dataType: 'JSON',
                          success: function (data, status) {
                              if (status == "success") {
                                  Layer.close(index);
                                  location.reload();
                              }
                          },
                          error: function () {
                              alert('编辑失败');
                          },
                          complete: function () {

                          }
                      });
                  }
              );
          });
          //表格切换
            $("#toggleview").on('click', function (e) {
                if($("#table thead").is(":hidden")){
                    //转换table视图
                    $("#table thead").show();
                    var ss = '';
                    $("#datalist tr").each(function(i){
                        var obj = $(this);
                        ss += '<tr data-index="'+i+'">';
                            $.each(eval(pagedata.columns),function(k,v){
                                if(v.isshowlist==1){
                                    switch(k.toLowerCase()){
                                        case 'itemid':
                                            ss += '<td class="bs-checkbox" columnname="'+v.columnenname+'">';
                                            ss += '<input data-index="'+i+'" name="btSelectItem" type="checkbox" value="'+obj.find("div.card-view [columnname='"+k.toLowerCase()+"'] input[type='checkbox']").val()+'" />';
                                        break;
                                        default:
                                            var s4 = obj.find("div.card-view[columnname='"+v.columnenname+"'] span.value").html();
                                            if(typeof(s4)!='undefined'){
                                                ss += '<td columnname="'+k+'">';
                                                ss += s4;
                                            }
                                    }
                                    ss += '</td>';
                                }
                            });

                            ss += '<td columnname="caozuo">';
                                ss += obj.find("div.card-view[columnname='caozuo'] span.value").html();
                            ss += '</td>';
                        ss += '</tr>';
                    });
                    $("#datalist").html(ss);
                }else{
                    //转换cardview视图
                    $("#table thead").hide();
                    var ss = '';
                    $("#datalist tr").each(function(i){
                        var obj = $(this);
                        ss += '<tr data-index="0">';
                        ss += '<td>';
                          ss += '<div class="card-views">';
                            $.each(eval(pagedata.columns),function(k,v){
                                if(v.isshowlist==1){
                                    ss += '<div class="card-view" columnname="'+v.columnenname+'">';
                                    switch(k.toLowerCase()){
                                        case 'itemid':
                                            ss += '<input data-index="'+i+'" name="btSelectItem" type="checkbox" value="'+obj.find("td[columnname='"+k.toLowerCase()+"'] input[type='checkbox']").val()+'" />';
                                        break;
                                        default:
                                            var s4 = obj.find("td[columnname='"+k+"']").html();
                                            if(typeof(s4)!='undefined'){
                                                ss += '<span class="title">'+v.columnname+'</span><span class="value">'+s4+'</span>';
                                            }
                                    }
                                    ss += '</div>';
                                }
                            });
                            ss += '<div class="card-view" columnname="caozuo">';
                                ss += '<span class="title" style="text-align: center; vertical-align: middle; ">操作</span>';
                                ss += '<span class="value">'+obj.find("td[columnname='caozuo']").html()+'</span>';
                              //<span class="value"><a href="/admin/auth/adminlog/detail/ids/1355" class="btn btn-info btn-xs btn-detail btn-dialog" title="详情"><i class="fa fa-list"></i> 详情</a> <a href="javascript:;" class="btn btn-xs btn-danger btn-delone" title=""><i class="fa fa-trash"></i></a></span>
                            ss += '</div>';
                          ss += '</div>';
                        ss += '</td>';
                        ss += '</tr>';
                    });
                    $("#datalist").html(ss);
                }
            });
          Controller.api.bindevent();
      },
      add: function () {
          Controller.api.bindevent();
          //$("select[name='row[pid]']").trigger("change");
          
      },
      edit: function () {
          $(".returnback").click(function(){
              history.back();
          });
          Controller.api.bindevent();
          $("select[name='row[pid]']").trigger("change");
      },
      api: {
          bindevent: function () {
                Form.api.bindevent($("form[role=form]"), null, null, function () {
                    //alert($("#treeview").size());
                    if ($("#treeview").size() > 0) {
                        var r = $("#treeview").jstree("get_all_checked");
                        $("input[name='row[rules]']").val(r.join(','));
                    }
                    if ($("#treeviewi").size() > 0) {
                        var r = $("#treeviewi").jstree("get_all_checked");
                        $("input[name='row[interfaces]']").val(r.join(','));
                    }
                    return true;
                });
                //渲染权限节点树
                //变更级别后需要重建节点树
                $(document).on("change", "select[name='row[pid]']", function () {
                    var pid = $(this).data("pid");
                    var id = $(this).data("id");
                    if($(this).val()==null){
                        pid = '88D74E5D3827AD2CC28516C326E52A82';
                    }else{
                        pid = $(this).val();
                        if ($(this).val() == id) {
                            $("option[value='" + pid + "']", this).prop("selected", true).change();
                            //Backend.api.toastr.error(__('Can not change the parent to self'));
                            return false;
                        }
                    }                     
                    //console.log(pid);
                    $.ajax({
                        url: "auth.group/roletree",
                        type: 'post',
                        dataType: 'json',
                        data: {id: id, pid: pid},
                        success: function (ret) {
                            if (ret.hasOwnProperty("code")) {
                                var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : "";
                                if (ret.code === 1) {
                                    //销毁已有的节点树
                                    $("#treeview").jstree("destroy");
                                    Controller.api.rendertree(data, 'treeview');
                                } else {
                                    Backend.api.toastr.error(ret.data);
                                }
                            }
                        }, 
                        error: function (e) {
                            Backend.api.toastr.error(e.message);
                        },
                        complete: function (e) {
                            //Backend.api.toastr.error(e.message);
                        }
                    });

                    $.ajax({
                        url: "auth.group/roleinterface",
                        type: 'post',
                        dataType: 'json',
                        data: { id: id, pid: pid },
                        success: function (ret) {
                            if (ret.hasOwnProperty("code")) {
                                var data = ret.hasOwnProperty("data") && ret.data != "" ? ret.data : "";
                                if (ret.code === 1) {
                                    //销毁已有的节点树
                                    $("#treeviewi").jstree("destroy");
                                    //console.log(data);
                                    Controller.api.rendertree(data,'treeviewi');
                                } else {
                                    Backend.api.toastr.error(ret.data);
                                }
                            }
                        },
                        error: function (e) {
                            Backend.api.toastr.error(e.message);
                        },
                        complete: function (e) {
                            //Backend.api.toastr.error(e.message);
                        }
                    });
                });
                //全选和展开
                $(document).on("click", "#checkall", function () {
                    $("#treeview").jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
                });
                $(document).on("click", "#expandall", function () {
                    $("#treeview").jstree($(this).prop("checked") ? "open_all" : "close_all");
                });
                $(document).on("click", "#checkalli", function () {
                    $("#treeviewi").jstree($(this).prop("checked") ? "check_all" : "uncheck_all");
                });
                $(document).on("click", "#expandalli", function () {
                    $("#treeviewi").jstree($(this).prop("checked") ? "open_all" : "close_all");
                });  
            },
            rendertree: function (content,s) {
                var str = typeof(s)!=undefined?s:'treeview';
                $("#"+s).on('redraw.jstree', function (e) {
                    $(".layer-footer").attr("domrefresh", Math.random());
                }).jstree({
                    "themes": {"stripes": true},
                    "checkbox": {"keep_selected_style": false,},
                    "types": {
                        "root": {"icon": "fa fa-folder-open",},
                        "menu": {"icon": "fa fa-folder-open",},
                        "file": {"icon": "fa fa-file-o",}
                    },
                    "plugins": ["checkbox", "types"],
                    "core": {
                        'check_callback': true,
                        "data": content
                    }
                });
            }
      }
  };
  return Controller;
});
function creatList(obj, list){
		$.each(eval(obj), function(i,item) {
				var temp = new Object();
				temp.text = item.name;
				temp.value = item.id;
				list.push(temp);
		});
}
//补足表格的列(PC)
function addColumnPc(key){
		var l = 10000;//初始化顺序
		var columnenname = '';var columnname = '';
		$.each(eval(pagedata.columns),function(k,v){
				var temp = new Object();
				if(k.toLowerCase()==key){
						columnenname = v.columnenname;
						columnname = v.columnname;
						l = v.listorder;
				}
				if((v.listorder>l)&&(v.isshowlist==1)){
						var html = "";
						$("#table thead").find("tr th[data-field='"+v.columnenname+"']").before('<th data-field="'+columnenname+'"><div class="th-inner">'+columnname+'</div><div class="fht-cell"></div></th>');
						var list = eval(pagedata.list);
						var cv = '';
						var lst = $("#table tbody tr").find("td[columnname="+Fast.api.ucfirst(v.columnenname)+"]");
						//把单元格的列加上
						lst.each(function(i){
								$(this).before('<td columnname="'+Fast.api.ucfirst(columnenname)+'">'+list[i][columnenname.toLowerCase()]+'</td>');
						});
						return false;
				}
		});
}
//补足表格的列(Mobile)
function addColumnMobile(key){
		var l = 10000;//初始化顺序
		var columnenname = '';var columnname = '';
		$.each(eval(pagedata.columns),function(k,v){
				var temp = new Object();
				if(k.toLowerCase()==key){
						columnenname = v.columnenname;
						columnname = v.columnname;
						l = v.listorder;
				}
				if((v.listorder>l)&&(v.isshowlist==1)){
						var html = "";
						var list = eval(pagedata.list);
						var cv = '';
						var lst = $("#datalist tr td").find("div[columnname="+v.columnenname+"]");
						//把单元格的列加上
						lst.each(function(i){
								$(this).before('<div class="card-view" columnname="'+columnenname.toLowerCase()+'"><span class="title">'+columnname+'</span><span class="value">'+list[i][columnenname.toLowerCase()]+'</span></div>');
						});return false;
				}
		});
		return false;
}
